From 38d0d0a687c0c7416188cd6095ae4ebf69dc4f53 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 15 Feb 2016 18:56:42 +0100 Subject: [PATCH] gdkdnd: Stick to the first gdk_drag_drop_done() result That way we can let ::cancel callers to override the visual result of the operation (eg. when detaching notebook tabs on NO_TARGET). Also, document gdk_drag_drop_done() so it is mentioned that this is a one-shot call. https://bugzilla.gnome.org/show_bug.cgi?id=761954 --- gdk/gdkdnd.c | 9 +++++++++ gdk/gdkdndprivate.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/gdk/gdkdnd.c b/gdk/gdkdnd.c index b76b110804..02d8d53420 100644 --- a/gdk/gdkdnd.c +++ b/gdk/gdkdnd.c @@ -641,6 +641,10 @@ gdk_drag_context_set_hotspot (GdkDragContext *context, * be the last call before dropping the reference to the * @context. * + * The #GdkDragContext will only take the first gdk_drag_drop_done() + * call as effective, if this function is called multiple times, + * all subsequent calls will be ignored. + * * Since: 3.20 */ void @@ -649,6 +653,11 @@ gdk_drag_drop_done (GdkDragContext *context, { g_return_if_fail (GDK_IS_DRAG_CONTEXT (context)); + if (context->drop_done) + return; + + context->drop_done = TRUE; + if (GDK_DRAG_CONTEXT_GET_CLASS (context)->drop_done) GDK_DRAG_CONTEXT_GET_CLASS (context)->drop_done (context, success); } diff --git a/gdk/gdkdndprivate.h b/gdk/gdkdndprivate.h index 8eb94b8fa0..c66de32d85 100644 --- a/gdk/gdkdndprivate.h +++ b/gdk/gdkdndprivate.h @@ -105,6 +105,8 @@ struct _GdkDragContext { guint32 start_time; GdkDevice *device; + + guint drop_done : 1; /* Whether gdk_drag_drop_done() was performed */ }; GList * gdk_drag_context_list (void); -- 2.30.2